package com.translator.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * 应用程序配置类
 * 负责管理应用程序的配置信息，包括翻译引擎设置、API密钥、代理设置等
 */
public class AppConfig {
    
    private static final String CONFIG_FILE = "translator_config.properties";
    private static AppConfig instance;
    private Properties properties;
    
    // 配置项键名
    public static final String KEY_DEFAULT_ENGINE = "default.engine";
    public static final String KEY_PROXY_ENABLED = "proxy.enabled";
    public static final String KEY_PROXY_HOST = "proxy.host";
    public static final String KEY_PROXY_PORT = "proxy.port";
    public static final String KEY_PROXY_USERNAME = "proxy.username";
    public static final String KEY_PROXY_PASSWORD = "proxy.password";
    
    // API密钥前缀
    public static final String PREFIX_API_KEY = "api.key.";
    
    private AppConfig() {
        properties = new Properties();
    }
    
    public static synchronized AppConfig getInstance() {
        if (instance == null) {
            instance = new AppConfig();
        }
        return instance;
    }
    
    /**
     * 加载配置文件
     */
    public void loadConfig() {
        File configFile = new File(CONFIG_FILE);
        if (configFile.exists()) {
            try (FileInputStream fis = new FileInputStream(configFile)) {
                properties.load(fis);
            } catch (IOException e) {
                System.err.println("无法加载配置文件: " + e.getMessage());
            }
        } else {
            // 设置默认配置
            setDefaultConfig();
            saveConfig();
        }
    }
    
    /**
     * 保存配置到文件
     */
    public void saveConfig() {
        try (FileOutputStream fos = new FileOutputStream(CONFIG_FILE)) {
            properties.store(fos, "翻译软件配置");
        } catch (IOException e) {
            System.err.println("无法保存配置文件: " + e.getMessage());
        }
    }
    
    /**
     * 设置默认配置
     */
    private void setDefaultConfig() {
        properties.setProperty(KEY_DEFAULT_ENGINE, "OpenAI"); // 您可以根据需要更改默认引擎
        properties.setProperty(KEY_PROXY_ENABLED, "false");
        properties.setProperty(KEY_PROXY_HOST, "127.0.0.1");
        properties.setProperty(KEY_PROXY_PORT, "7890");
        properties.setProperty(KEY_PROXY_USERNAME, "");
        properties.setProperty(KEY_PROXY_PASSWORD, "");
    }
    
    /**
     * 获取默认翻译引擎
     */
    public String getDefaultEngine() {
        return properties.getProperty(KEY_DEFAULT_ENGINE, "OpenAI");
    }
    
    /**
     * 设置默认翻译引擎
     */
    public void setDefaultEngine(String engineName) {
        properties.setProperty(KEY_DEFAULT_ENGINE, engineName);
    }
    
    /**
     * 获取指定引擎的API密钥
     */
    public String getApiKey(String engineName) {
        return properties.getProperty(PREFIX_API_KEY + engineName.toLowerCase(), "");
    }
    
    /**
     * 设置指定引擎的API密钥
     */
    public void setApiKey(String engineName, String apiKey) {
        properties.setProperty(PREFIX_API_KEY + engineName.toLowerCase(), apiKey);
    }
    
    /**
     * 检查代理是否启用
     */
    public boolean isProxyEnabled() {
        return Boolean.parseBoolean(properties.getProperty(KEY_PROXY_ENABLED, "false"));
    }
    
    /**
     * 设置代理启用状态
     */
    public void setProxyEnabled(boolean enabled) {
        properties.setProperty(KEY_PROXY_ENABLED, String.valueOf(enabled));
    }
    
    /**
     * 获取代理主机
     */
    public String getProxyHost() {
        return properties.getProperty(KEY_PROXY_HOST, "");
    }
    
    /**
     * 设置代理主机
     */
    public void setProxyHost(String host) {
        properties.setProperty(KEY_PROXY_HOST, host);
    }
    
    /**
     * 获取代理端口
     */
    public int getProxyPort() {
        try {
            return Integer.parseInt(properties.getProperty(KEY_PROXY_PORT, "0"));
        } catch (NumberFormatException e) {
            return 0;
        }
    }
    
    /**
     * 设置代理端口
     */
    public void setProxyPort(int port) {
        properties.setProperty(KEY_PROXY_PORT, String.valueOf(port));
    }
    
    /**
     * 获取代理用户名
     */
    public String getProxyUsername() {
        return properties.getProperty(KEY_PROXY_USERNAME, "");
    }
    
    /**
     * 设置代理用户名
     */
    public void setProxyUsername(String username) {
        properties.setProperty(KEY_PROXY_USERNAME, username);
    }
    
    /**
     * 获取代理密码
     */
    public String getProxyPassword() {
        return properties.getProperty(KEY_PROXY_PASSWORD, "");
    }
    
    /**
     * 设置代理密码
     */
    public void setProxyPassword(String password) {
        properties.setProperty(KEY_PROXY_PASSWORD, password);
    }
    
    /**
     * 应用代理设置到系统属性
     * 此方法已被ProxyManager替代，保留此方法以保持兼容性
     * @deprecated 使用 ProxyManager.getInstance().applyProxySettings() 代替
     */
    @Deprecated
    public void applyProxySettings() {
        // 委托给ProxyManager处理
        com.translator.util.ProxyManager.getInstance().applyProxySettings();
    }

}